package com.vanco.abplayer.view;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Environment;
import android.widget.Toast;

public class ApplicationUtils {
	/**
	 * 备份App 首先无需提升权限就就可以复制APK，查看权限你就会知道，在data/app下的APK权限如下：-rw-r--r-- system
	 * system 5122972 2012-12-13 10:38 com.taobao.taobao-1.apk 我们是有读取权限的。
	 * 
	 * @param packageName
	 * @param mActivity
	 * @throws IOException
	 */
	public static void backupApp(String packageName, Activity mActivity)
			throws IOException {
		// 存放位置
		String newFile = Environment.getExternalStorageDirectory()
				.getAbsolutePath() + File.separator;
		String oldFile = null;
		try {
			// 原始位置
			oldFile = mActivity.getPackageManager().getApplicationInfo(
					packageName, 0).sourceDir;
		} catch (NameNotFoundException e) {
			e.printStackTrace();
		}
		System.out.println(newFile);
		System.out.println(oldFile);

		File in = new File(oldFile);
		File out = new File(newFile + packageName + ".apk");
		if (!out.exists()) {
			out.createNewFile();
			Toast.makeText(mActivity, "文件备份成功！" + "存放于" + newFile + "目录下", 1)
					.show();
		} else {
			Toast.makeText(mActivity, "文件已经存在！" + "查看" + newFile + "目录下", 1)
					.show();
		}

		FileInputStream fis = new FileInputStream(in);
		FileOutputStream fos = new FileOutputStream(out);

		int count;
		// 文件太大的话，我觉得需要修改
		byte[] buffer = new byte[256 * 1024];
		while ((count = fis.read(buffer)) > 0) {
			fos.write(buffer, 0, count);
		}

		fis.close();
		fos.flush();
		fos.close();
	}

	/**
	 * 获取当前Apk版本号 android:versionCode
	 * 
	 * @param context
	 * @return
	 */
	public static int getVerCode(Context context) {
		int verCode = -1;
		try {
			verCode = context.getPackageManager().getPackageInfo(
					context.getPackageName(), 0).versionCode;
		} catch (NameNotFoundException e) {
		}
		return verCode;
	}

	public static String getVerName(Context context) {
		try {
			return context.getPackageManager().getPackageInfo(
					context.getPackageName(), 0).versionName;
		} catch (NameNotFoundException e) {
		}
		return "";
	}

	/**
	 * 返回当前的应用是否处于前台显示状态 不需要android.permission.GET_TASKS权限
	 * http://zengrong.net/post/1680.htm
	 * 
	 * @param packageName
	 * @return
	 */
	public static boolean isTopActivity(Context context, String packageName) {
		// _context是一个保存的上下文
		ActivityManager am = (ActivityManager) context.getApplicationContext()
				.getSystemService(Context.ACTIVITY_SERVICE);
		List<ActivityManager.RunningAppProcessInfo> list = am
				.getRunningAppProcesses();
		if (list.size() == 0)
			return false;
		for (ActivityManager.RunningAppProcessInfo process : list) {
			// Log.d(getTAG(), Integer.toString(__process.importance));
			// Log.d(getTAG(), __process.processName);
			if (process.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND
					&& process.processName.equals(packageName)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 检测APP是否存在
	 * @param context
	 * @param packageName
	 * @return
	 */
	public static boolean checkAppExist(Context context, String packageName) {
		try {
			ApplicationInfo info = context.getPackageManager()
					.getApplicationInfo(packageName, 0);
			return info != null && info.packageName.equals(packageName);
		} catch (PackageManager.NameNotFoundException e) {

		} catch (Exception e) {
		}
		return false;
	}
}
